package ltd.bugs.cute.common.extention;

import java.util.Comparator;

import ltd.bugs.cute.common.extention.annotation.Order;

/**
 * 扩展实现节点的比较器
 * 
 * @author zhengzhq
 *
 */
public class ExtentionComparator implements Comparator<Class<?>> {
  @Override
  public int compare(Class<?> type1, Class<?> type2) {
    if (getOrder(type1) > getOrder(type2)) {
      return 1;
    }

    return -1;
  }

  /**
   * 获取扩展节点的顺序，如果有使用@Order，则按照@Order的实际值返回；否则返回Integer的最大值，代表优先级最低
   * 
   * @param type
   * @return
   */
  private int getOrder(Class<?> type) {
    if (type.isAnnotationPresent(Order.class)) {
      return type.getAnnotation(Order.class).value();
    }

    return Integer.MAX_VALUE;
  }
}
